package pe.gob.osce.sirenas.wd.jsf.bean.administracion;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;

import pe.gob.osce.sirenas.model.AuditoriaDTO;
import pe.gob.osce.sirenas.model.BusquedaFichaDTO;
import pe.gob.osce.sirenas.model.BusquedaFiscalizacionDTO;
import pe.gob.osce.sirenas.model.DocenciaDTO;
import pe.gob.osce.sirenas.model.EspecialidadAcademicaDTO;
import pe.gob.osce.sirenas.model.ExperienciaLaboralDTO;
import pe.gob.osce.sirenas.model.FichaArbitralDTO;
import pe.gob.osce.sirenas.model.FiscalizaEntidadDTO;
import pe.gob.osce.sirenas.model.FiscalizacionDTO;
import pe.gob.osce.sirenas.model.FormacionAcademicaDTO;
import pe.gob.osce.sirenas.model.SolicitudInscripcionDTO;
import pe.gob.osce.sirenas.model.TrayectoriaArbitralDTO;
import pe.gob.osce.sirenas.svc.BusquedaFichaArbitralAdminServiceLocal;
import pe.gob.osce.sirenas.svc.RegistrarFichaArbitroServiceLocal;
import pe.gob.osce.sirenas.svc.RegistrarFiscalizacionServiceLocal;
import pe.gob.osce.sirenas.util.ModeloException;
import pe.gob.osce.sirenas.wd.jsf.bean.registro.RegistroArbitroFormacionAcademicaBean;
import pe.gob.osce.sirenas.wd.jsf.bean.registro.RegistroSecretarioBean;
import pe.gob.osce.sirenas.wd.util.ConstanteWeb;
import pe.gob.osce.sirenas.wd.util.RepositorioDatos;
import pe.gob.osce.sirenas.wd.util.UBaseManage;

@ManagedBean(name="bandejaFiscalizacionBean")
@SessionScoped
public class BandejaFiscalizacionBean extends UBaseManage implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -4633279943594672660L;

	@EJB
	private BusquedaFichaArbitralAdminServiceLocal busquedaFichaArbitralAdminService;
	@EJB
	private RegistrarFiscalizacionServiceLocal registrarFiscalizacionService;
	@EJB
	private RegistrarFichaArbitroServiceLocal registrarFichaArbitroService;
	
	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteWeb.PROPERTIES);

    private RequestContext context; 

    List<DocenciaDTO> listaDocenciaFiscalizada;
	List<EspecialidadAcademicaDTO> listaEspecialidadFiscalizada;
	List<ExperienciaLaboralDTO> listaExpLaboralFiscalizada;
	List<FormacionAcademicaDTO> listaFormacionFiscalizada;
	List<TrayectoriaArbitralDTO> listaTrayectoriaFiscalizada;
    
    private FiscalizacionDTO fiscalizacionDTO = new FiscalizacionDTO();
    private List<FiscalizacionDTO> listaInformesFiscalizacion=new ArrayList<FiscalizacionDTO>();
    private FiscalizaEntidadDTO fiscalizaEntidadDTO = new FiscalizaEntidadDTO();
	private BusquedaFichaDTO busquedaFichaDTO;
	private List<BusquedaFichaDTO> listaFichas;
	private List<BusquedaFichaDTO> listaFichasTemporal;
	private List<BusquedaFichaDTO> listaFichasSeleccionadas;
	private BusquedaFiscalizacionDTO busquedaFiscalizacionDTO;
	private List<BusquedaFiscalizacionDTO> listaFiscalizaciones;
	private List<BusquedaFiscalizacionDTO> listaBusquedaFiscalizaciones;
	private String codBloque;
	
	private RepositorioDatos repositorioDatos;
	private AuditoriaDTO auditoria;

	/**
	 * Resumen.	Metodo que iniciliza la bandeja de evaluacion de quejas
	 * @return cadena mapeada para la navegacion, tipo String.
	 */

	@PostConstruct
    public void init() {

		this.busquedaFichaDTO=new BusquedaFichaDTO();
		this.listaFichas = new ArrayList<BusquedaFichaDTO>();
		this.busquedaFiscalizacionDTO=new BusquedaFiscalizacionDTO();
		this.listaFiscalizaciones = new ArrayList<BusquedaFiscalizacionDTO>();
		this.listaBusquedaFiscalizaciones=new ArrayList<BusquedaFiscalizacionDTO>();
		this.repositorioDatos=obtenerRepositorioDatos();
		this.listaFichasSeleccionadas=new ArrayList<BusquedaFichaDTO>();
		this.auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
    }
	
	public String verBandejaFiscalizacion() {
		this.busquedaFichaDTO=new BusquedaFichaDTO();
		this.listaFichas = new ArrayList<BusquedaFichaDTO>();
		this.busquedaFiscalizacionDTO=new BusquedaFiscalizacionDTO();
		this.listaFiscalizaciones = new ArrayList<BusquedaFiscalizacionDTO>();
		this.listaBusquedaFiscalizaciones=new ArrayList<BusquedaFiscalizacionDTO>();
		this.repositorioDatos=obtenerRepositorioDatos();
		this.listaFichasSeleccionadas=new ArrayList<BusquedaFichaDTO>();
		this.auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);

		Long correlativo=repositorioDatos.getCorrelativos().get(propSirenas.getString(ConstanteWeb.KEY_CORRELATIVO_FISCALIZACION));
		codBloque=String.format("%0"+propSirenas.getString(ConstanteWeb.LENGTH_CORRELATIVO)+"d", correlativo);
		
		System.out.println("Entrandos a mi metodo");
		System.out.println("Iniciacion verRegistroArbitro");
		return "verBandejaFiscalizacion";
	}
	public boolean validaBusquedaFiscalizacion(){

		boolean validacion=true;
		if(this.busquedaFiscalizacionDTO.getNumRuc().toString().length()<=10 && 
				this.busquedaFiscalizacionDTO.getNumDocumento().length()<=7 && 
				this.busquedaFiscalizacionDTO.getNombres().trim().isEmpty() && 
				this.busquedaFiscalizacionDTO.getApPaterno().trim().isEmpty() && 
				this.busquedaFiscalizacionDTO.getApMaterno().trim().isEmpty() &&
				this.busquedaFiscalizacionDTO.getIdEstadoProceso() < 0
			){
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_REQUIRED),propSirenas.getString(ConstanteWeb.MSJ_REQ_CRITERIO_MIN));
			return false;
		}
		return validacion;
	}
	public void buscarFiscalizaciones(){
		if(validaBusquedaFiscalizacion()){
			try {			
				this.listaBusquedaFiscalizaciones=registrarFiscalizacionService.obtenerBusquedaFiscalizacion(this.busquedaFiscalizacionDTO);
				if(!this.listaBusquedaFiscalizaciones.isEmpty()){
					for (BusquedaFiscalizacionDTO datosFiscalizacion : this.listaBusquedaFiscalizaciones) {
						datosFiscalizacion.setDescTipoDocumento(repositorioDatos.getLabelParametro(datosFiscalizacion.getIndTipoDocumento()));
						datosFiscalizacion.setDescEstadoProceso(repositorioDatos.getLabelEstadoFiscalizacion(datosFiscalizacion.getIdEstadoProceso()));					
					}
					RequestContext.getCurrentInstance().update("listaBusFiscalizaciones");
				}else{
					setMensajeroInfo(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),propSirenas.getString(ConstanteWeb.EXC_MODELO_NO_DATA));
				}
			} catch (ModeloException e) {
				setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
			}catch (Exception e) {
				setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
			}
		}
	}
	
	public boolean validaBusquedaPersonalizada(){
		boolean validacion=true;
		if(this.busquedaFichaDTO.getNumRuc().toString().length()<=10 && 
				this.busquedaFichaDTO.getNumDocumento().length()<=7 && 
				this.busquedaFichaDTO.getNombres().trim().isEmpty() && 
				this.busquedaFichaDTO.getApPaterno().trim().isEmpty() && 
				this.busquedaFichaDTO.getApMaterno().trim().isEmpty() 
			){
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_REQUIRED),propSirenas.getString(ConstanteWeb.MSJ_REQ_CRITERIO_MIN));
			return false;
		}
		return validacion;
	}
	public void buscarFichaRegistradas(){
		if(validaBusquedaPersonalizada()){
			try {			
				this.listaFichas= new ArrayList<BusquedaFichaDTO>();
				this.listaFichas=registrarFiscalizacionService.obtenerBusquedaFiscalizacionPersonalizada(busquedaFichaDTO);
				if(!this.listaFichas.isEmpty()){
					for (BusquedaFichaDTO busquedaFicha : this.listaFichas) {
						busquedaFicha.setDescTipoDocumento(repositorioDatos.getLabelParametro(busquedaFicha.getIndTipoDocumento()));
						String[] dataEstado=repositorioDatos.getDescriptoresEstadoLista(busquedaFicha.getIdEstadoFicha());
						busquedaFicha.setDescEstadoFicha(dataEstado[2]);
						busquedaFicha.setAmonestacion("0");
					}
					RequestContext.getCurrentInstance().update("dialogConfirmacion");
					RequestContext.getCurrentInstance().update("listaFichas");
					abrirResultadoPopup();
				}else{
					setMensajeroInfo(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),propSirenas.getString(ConstanteWeb.EXC_MODELO_NO_DATA));
				}
			} catch (ModeloException e) {
				setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
			}catch (Exception e) {
				setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
			}
		}
	}

	public void buscarFichaRegistradasAleatoria(){	
		try {			
			this.listaFichas= new ArrayList<BusquedaFichaDTO>();
			this.listaFichas=registrarFiscalizacionService.obtenerBusquedaFiscalizacionAleatoria(this.busquedaFiscalizacionDTO);
			if(!this.listaFichas.isEmpty()){
				for (BusquedaFichaDTO busquedaFicha : this.listaFichas) {
					busquedaFicha.setDescTipoDocumento(repositorioDatos.getLabelParametro(busquedaFicha.getIndTipoDocumento()));
					String[] dataEstado=repositorioDatos.getDescriptoresEstadoLista(busquedaFicha.getIdEstadoFicha());
					busquedaFicha.setDescEstadoFicha(dataEstado[2]);
					busquedaFicha.setAmonestacion("0");
				}
				RequestContext.getCurrentInstance().update("dialogConfirmacion");
				RequestContext.getCurrentInstance().update("listaFichas");
				abrirResultadoPopup();
			}else{
				setMensajeroInfo(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),propSirenas.getString(ConstanteWeb.EXC_MODELO_NO_DATA));
			}
		} catch (ModeloException e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
		}catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}
	public void agregarFichaSeleccion(){
		int contador=0;
		try {			
			if(!this.listaFichasTemporal.isEmpty()){
				for (BusquedaFichaDTO fichaSeleccionada : this.listaFichasTemporal) {
					if(!estaEnLista(fichaSeleccionada.getIdFicha())){

						this.busquedaFiscalizacionDTO=new BusquedaFiscalizacionDTO();
						busquedaFiscalizacionDTO.setIdFicha(fichaSeleccionada.getIdFicha());
						
						busquedaFiscalizacionDTO.setCodBloque(codBloque);
						busquedaFiscalizacionDTO.setApellidos(fichaSeleccionada.getApellidos() );
						busquedaFiscalizacionDTO.setNombres(fichaSeleccionada.getNombres() );
						busquedaFiscalizacionDTO.setNombreCompleto(fichaSeleccionada.getNombreCompleto());
						busquedaFiscalizacionDTO.setNumDocumento(fichaSeleccionada.getNumDocumento());
						busquedaFiscalizacionDTO.setNumRuc(fichaSeleccionada.getNumRuc());
						busquedaFiscalizacionDTO.setTipoFicha(fichaSeleccionada.getTipoFicha());
						busquedaFiscalizacionDTO.setDescEstado(fichaSeleccionada.getDescEstado());
						busquedaFiscalizacionDTO.setIdEstadoProceso(repositorioDatos.getIdEstadoLista(ConstanteWeb.EST_GENERADO));
						this.listaFiscalizaciones.add(busquedaFiscalizacionDTO);
						contador++;
					}else{
						setMensajeroInfo("Ficha ya se encuentra en Lista");
					}
				}			
				setMensajeroInfo("Se agregaron "+contador+" registros");
				cerrarResultadoPopup();
				RequestContext.getCurrentInstance().update("idFormGenerarFiscalizacion");	
				RequestContext.getCurrentInstance().update("gridFormGenerarFiscalizacion");	
				RequestContext.getCurrentInstance().update("listaFichasFiscalizables");		
			}
			
		} catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}
	
	/**Realizar la Generacion de Fiscalizaciones de la Lista de Fichas Seleccionada, para su posterior Registro*/
	public void generarFiscalizacion(){
		try {		
			if(!this.listaFiscalizaciones.isEmpty()){
				registrarFiscalizacionService.generarFiscalizacion(listaFiscalizaciones, this.auditoria);
				
				this.listaFiscalizaciones=new ArrayList<BusquedaFiscalizacionDTO>();
				
				setMensajeroInfo(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE), "Registro Exitoso");
			}else{
				setMensajeroInfo(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_NO_DATA));
			}
		} catch (ModeloException e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
		}catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}


	public String verificaFiscalizacion(BusquedaFiscalizacionDTO fichaFiscalizacion){
		String pagFicha=null;
		this.auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
		FichaArbitralDTO fichaArbitralDTO=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
		try {
			/**Si se encuentra en estado GENERADO registro la Fecha de Inicio de Fiscalizacion*/
			if(fichaFiscalizacion.getIdEstadoProceso()==repositorioDatos.getIdEstadoLista(ConstanteWeb.EST_GENERADO)){

				this.fiscalizacionDTO.setIdEstadoProceso(repositorioDatos.getIdEstadoLista(ConstanteWeb.EST_INICIADO));
				this.fiscalizacionDTO.setIdFiscalizacion(fichaFiscalizacion.getIdFiscalizacion() );
				this.fiscalizacionDTO.setIdPersona(  fichaFiscalizacion.getIdPersona());
				
				registrarFiscalizacionService.registrarInicioFiscalizacion( this.fiscalizacionDTO, auditoria);
				setMensajeroInfo(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE), "Se registro el INICIO de la Fiscalizacion");
			}
			cargarDatosFicha(fichaFiscalizacion.getIdFicha());
			
			
			if(fichaFiscalizacion.getTipoFicha().equals(ConstanteWeb.TIPO_FICHA.ARBITRO.toString())){
				return new RegistroArbitroFormacionAcademicaBean().verRegistroArbitro();
			}if(fichaFiscalizacion.getTipoFicha().equals(ConstanteWeb.TIPO_FICHA.SECRETARIO.toString())){
				return new RegistroSecretarioBean().verRegistroSecretario();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}	
		return pagFicha;
	}
	

	public void cargarDatosFicha(Long idFicha){
		AuditoriaDTO auditoriaDTO=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
		FichaArbitralDTO fichaArbitralDTO=new FichaArbitralDTO();
		try {
			fichaArbitralDTO.setIdFicha(idFicha);
			fichaArbitralDTO=registrarFichaArbitroService.obtenerFichaArbitral(fichaArbitralDTO);
			String[] descEstado=repositorioDatos.getDescriptoresEstadoLista(fichaArbitralDTO.getEstadoFicha().getIdEstado());
			fichaArbitralDTO.getEstadoFicha().setNomEstado(descEstado[2]);	
			
			if(fichaArbitralDTO.getTipoFicha().equals(ConstanteWeb.TIPO_FICHA.ARBITRO.toString())){
				if(fichaArbitralDTO.getIndModalidadArbitro()!=null){
					fichaArbitralDTO.setModalidadArbitro(repositorioDatos.getDescModalidadArbitraje(fichaArbitralDTO.getIndModalidadArbitro().longValue() ));
				}else{
					fichaArbitralDTO.setModalidadArbitro("No registra");
				}
				
			}if(fichaArbitralDTO.getTipoFicha().equals(ConstanteWeb.TIPO_FICHA.SECRETARIO.toString())){
				fichaArbitralDTO.setModalidadArbitro(ConstanteWeb.TIPO_FICHA.SECRETARIO.toString());
			}
			
			establecerObjetoSession(ConstanteWeb.FICHA_REGISTRO, fichaArbitralDTO);
			
			auditoriaDTO.setVerFicha(true);
			if(fichaArbitralDTO.getTipoFicha().equals(ConstanteWeb.TIPO_FICHA.ARBITRO.toString())){
				auditoriaDTO.setEsArbitro(true);
			}else{
				auditoriaDTO.setEsArbitro(false);				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}	
	}
	
	
	
	public Boolean estaEnLista(Long idFicha){
		for (BusquedaFiscalizacionDTO fichaSeleccionada : this.listaFiscalizaciones) {
			if(fichaSeleccionada.getIdFicha()==idFicha){
				return true;
			}
		}	
		return false;
	}

	public void eliminarFichaDeLista(Long idFicha){
		try {			
			for (BusquedaFiscalizacionDTO fichaSeleccionada : this.listaFiscalizaciones) {
				if(fichaSeleccionada.getIdFicha()==idFicha){
					this.listaFiscalizaciones.remove(fichaSeleccionada);
					break;
				}
			}				
		} catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}	
	}
	
	public void abrirResultadoPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('resultadoDialog').show();");
	}
	public void cerrarResultadoPopup(){
		this.listaFichasTemporal=new ArrayList<BusquedaFichaDTO>();
		context = RequestContext.getCurrentInstance();
		context.execute("PF('resultadoDialog').hide();");
	}

	public void verHistoricoFiscalizacion(){
		this.fiscalizacionDTO=new FiscalizacionDTO();
		FichaArbitralDTO fichaArbitralDTO=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
		try {
			//Obtiene y carga la fiscalizacion de la Entidad
			this.fiscalizacionDTO.setIdFicha(fichaArbitralDTO.getIdFicha());
			this.fiscalizacionDTO.setIdPersona(fichaArbitralDTO.getPersona().getIdPersona() ); ;
			this.fiscalizacionDTO.setIdFiscalizacion(fichaArbitralDTO.getIdFiscalizacion());
			listaInformesFiscalizacion=registrarFiscalizacionService.obtenerHistoricoFiscalizacion(fiscalizacionDTO);
			
			abrirHistoricoFiscalizacionPopup();
		} catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}

	public void verDetalleHistoricoFiscalizacion(Long idFiscalizacion){
		this.fiscalizacionDTO=new FiscalizacionDTO();
		try {
			//Obtiene y carga la fiscalizacion de la Entidad
			
			for (FiscalizacionDTO fiscalizacionDTO : this.listaInformesFiscalizacion) {
				if(fiscalizacionDTO.getIdFiscalizacion()==idFiscalizacion){
					this.fiscalizacionDTO= fiscalizacionDTO;
				}
			}
			
			Object[] listas=registrarFiscalizacionService.obtenerDetalleHistoricoFiscalizacion(fiscalizacionDTO);
			
			listaDocenciaFiscalizada=(ArrayList<DocenciaDTO>)listas[0];
			if (!listaDocenciaFiscalizada.isEmpty()) {
				for (DocenciaDTO docenciaDTO : listaDocenciaFiscalizada) {
					docenciaDTO.setDescripcionCurso(docenciaDTO.getDescripcionCurso().toUpperCase());					
					docenciaDTO.setDescCentroEstudios(repositorioDatos.getLabelCentroEstudios(docenciaDTO.getIdCentroEstudios().longValue()).toUpperCase().toUpperCase());
					docenciaDTO.setDescTipoActividad(repositorioDatos.getLabelParametro(docenciaDTO.getIndTipoActividad().longValue()).toUpperCase().toUpperCase());
					docenciaDTO.setDescTipoDuracion(repositorioDatos.getLabelParametro(docenciaDTO.getIndTipoDuracion().longValue()).toUpperCase());
				}								  
			}
			
			listaEspecialidadFiscalizada=(ArrayList)listas[1];
			if (!listaEspecialidadFiscalizada.isEmpty()) {
				for (EspecialidadAcademicaDTO especialidadAcademicaDTO : listaEspecialidadFiscalizada) {
					especialidadAcademicaDTO.setDescripcionGrado(especialidadAcademicaDTO.getDescripcionGrado().toUpperCase());
					if(especialidadAcademicaDTO.getDescripcionOtroCentro()!=null)
						especialidadAcademicaDTO.setDescripcionOtroCentro(especialidadAcademicaDTO.getDescripcionOtroCentro().toUpperCase());
					especialidadAcademicaDTO.setDescTipoFormacion(repositorioDatos.getLabelParametro(especialidadAcademicaDTO.getIndTipoFormacion().longValue()).toUpperCase());
					especialidadAcademicaDTO.setDescPais(repositorioDatos.getLabelPais(especialidadAcademicaDTO.getIdPais().longValue()).toUpperCase());
					especialidadAcademicaDTO.setDescAreaProfesion(repositorioDatos.getLabelAreaProfesion(especialidadAcademicaDTO.getIdAreaProfesion()).toUpperCase());
					especialidadAcademicaDTO.setDescCentroEstudios(repositorioDatos.getLabelCentroEstudios(especialidadAcademicaDTO.getIdCentroEstudios()).toUpperCase());
					especialidadAcademicaDTO.setDescGradoObtenido(repositorioDatos.getLabelParametro(especialidadAcademicaDTO.getIndGradoObtenido().longValue()).toUpperCase());
				}
			}
			
			listaExpLaboralFiscalizada=(ArrayList)listas[2];
			if (!listaExpLaboralFiscalizada.isEmpty()) {
				for (ExperienciaLaboralDTO experienciaLaboralDTO : listaExpLaboralFiscalizada) {
					experienciaLaboralDTO.setNomCentroTrabajo(experienciaLaboralDTO.getNomCentroTrabajo().toUpperCase());
					experienciaLaboralDTO.setDescripcionCargo(experienciaLaboralDTO.getDescripcionCargo().toUpperCase());	
				}
			}
			
			listaFormacionFiscalizada=(ArrayList)listas[3];
			if (!listaFormacionFiscalizada.isEmpty()) {
				for (FormacionAcademicaDTO formacionAcademicaDTO : listaFormacionFiscalizada) {
					formacionAcademicaDTO.setDescAreaProfesion(repositorioDatos.getLabelAreaProfesion(formacionAcademicaDTO.getIdAreaProfesion()).toUpperCase());
					formacionAcademicaDTO.setDescCentroEstudios(repositorioDatos.getLabelCentroEstudios(formacionAcademicaDTO.getIdCentroEstudios()).toUpperCase());
					if(formacionAcademicaDTO.getDescripcionOtroCentro()!=null)
						formacionAcademicaDTO.setDescripcionOtroCentro(formacionAcademicaDTO.getDescripcionOtroCentro().toUpperCase());
					formacionAcademicaDTO.setDescPais(repositorioDatos.getLabelPais(formacionAcademicaDTO.getIdPais()).toUpperCase());
					formacionAcademicaDTO.setDescGradoObtenido(repositorioDatos.getLabelParametro(formacionAcademicaDTO.getIndGradoObtenido()).toUpperCase());
					formacionAcademicaDTO.setDescripcionGrado(formacionAcademicaDTO.getDescripcionGrado().toUpperCase());
				}
			}
			listaTrayectoriaFiscalizada=(ArrayList)listas[4];
			if (!listaTrayectoriaFiscalizada.isEmpty()) {
				for (TrayectoriaArbitralDTO trayectoriaArbitralDTO : listaTrayectoriaFiscalizada) {
					trayectoriaArbitralDTO.setNomEntidad(trayectoriaArbitralDTO.getNomEntidad());
					trayectoriaArbitralDTO.setNomContratista(trayectoriaArbitralDTO.getNomContratista());
					trayectoriaArbitralDTO.setObjContratacion(trayectoriaArbitralDTO.getObjContratacion());
					trayectoriaArbitralDTO.setNumContrato(trayectoriaArbitralDTO.getNumContrato());
					trayectoriaArbitralDTO.setProcesoSeleccion(trayectoriaArbitralDTO.getProcesoSeleccion());					
					trayectoriaArbitralDTO.setDescMateriaControvertida(repositorioDatos.getLabelParametro(trayectoriaArbitralDTO.getIdMateriaControvertida().longValue()));
					trayectoriaArbitralDTO.setDescTipoArbitraje(repositorioDatos.getLabelParametro(trayectoriaArbitralDTO.getIndTipoArbitraje().longValue()));
				}
			}
			
			abrirInformeDetallePopup();
		} catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}
	public void abrirInformeDetallePopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogInformeDetalle').show();");
	}
	public void cerrarInformeDetallePopup(){
		this.listaFichasTemporal=new ArrayList<BusquedaFichaDTO>();
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogInformeDetalle').hide();");
	}
	
	public void abrirHistoricoFiscalizacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogHistoricoFiscalizacion').show();");
	}
	public void cerrarHistoricoFiscalizacionPopup(){
		this.listaFichasTemporal=new ArrayList<BusquedaFichaDTO>();
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogHistoricoFiscalizacion').hide();");
	}

	public void verDetalleInformeFiscalizacion(){
		this.fiscalizacionDTO=new FiscalizacionDTO();
		try {
			//Obtiene y carga la fiscalizacion de la Entidad
			
			abrirInformeFiscalizacionPopup();
		} catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}

	public void registraInformeFiscalizacion(ActionEvent event){
		this.auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
		FichaArbitralDTO fichaArbitralDTO=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
		try {
			
			this.fiscalizacionDTO.setIdEstadoProceso(repositorioDatos.getIdEstadoLista(ConstanteWeb.EST_CERRADO));
			this.fiscalizacionDTO.setIdFiscalizacion(fichaArbitralDTO.getIdFiscalizacion() );
			this.fiscalizacionDTO.setIdPersona(  fichaArbitralDTO.getPersona().getIdPersona());
			
			registrarFiscalizacionService.registrarInformeFiscalizacion( this.fiscalizacionDTO, auditoria);
							
			cargarDatosFicha(fichaArbitralDTO.getIdFicha());
			
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),"Registrado Correctamente");
			
			cerrarInformeFiscalizacionPopup();
		} catch (ModeloException e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
		}
		catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}
	
	public void abrirInformeFiscalizacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogInformeFiscalizacion').show();");
	}
	
	public void cerrarInformeFiscalizacionPopup(){		
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogInformeFiscalizacion').hide();");
	}

	public void verDetalleFiscalizacion(Long idFicha,Long idFormacionAcademica,String nomEntidad,String formOrigen){
		this.fiscalizaEntidadDTO=new FiscalizaEntidadDTO();
		FichaArbitralDTO fichaArbitralDTO=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
		try {
			//Obtiene y carga la fiscalizacion de la Entidad
			this.fiscalizaEntidadDTO.setIdFicha(idFicha);
			this.fiscalizaEntidadDTO.setIdEntidad(idFormacionAcademica);
			this.fiscalizaEntidadDTO.setNomEntidad(nomEntidad);			
			this.fiscalizaEntidadDTO.setIdFiscalizacion(fichaArbitralDTO.getIdFiscalizacion());

			if(FormacionAcademicaDTO.nomEntidad.equals(this.fiscalizaEntidadDTO.getNomEntidad() )){
				this.fiscalizaEntidadDTO=registrarFiscalizacionService.obtieneFiscalizaFormacion(this.fiscalizaEntidadDTO);
			}
			if(DocenciaDTO.nomEntidad.equals(this.fiscalizaEntidadDTO.getNomEntidad() )){
				this.fiscalizaEntidadDTO=registrarFiscalizacionService.obtieneFiscalizacionDocencia(this.fiscalizaEntidadDTO);
			}
			if(EspecialidadAcademicaDTO.nomEntidad.equals(this.fiscalizaEntidadDTO.getNomEntidad() )){
				this.fiscalizaEntidadDTO=registrarFiscalizacionService.obtieneFiscalizaEspecialidad(this.fiscalizaEntidadDTO);
			}
			if(ExperienciaLaboralDTO.nomEntidad.equals(this.fiscalizaEntidadDTO.getNomEntidad() )){
				this.fiscalizaEntidadDTO=registrarFiscalizacionService.obtieneFiscalizaExpLaboral(this.fiscalizaEntidadDTO);
			}
			if(TrayectoriaArbitralDTO.entidadTabla.equals(this.fiscalizaEntidadDTO.getNomEntidad() )){
				this.fiscalizaEntidadDTO=registrarFiscalizacionService.obtieneFiscalizaTrayecArbitral(this.fiscalizaEntidadDTO);
			} 
			this.fiscalizaEntidadDTO.setFormOrigen(formOrigen);
			abrirRegistroFiscalizacionPopup();
		} catch (ModeloException e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
		}catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}


	public void registraDetalleFiscalizacion(){
		this.auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
		FichaArbitralDTO fichaArbitralDTO=(FichaArbitralDTO)obtenerObjetoSession(ConstanteWeb.FICHA_REGISTRO);
		try {
			this.fiscalizaEntidadDTO.setIdFiscalizacion(fichaArbitralDTO.getIdFiscalizacion());
			if(FormacionAcademicaDTO.nomEntidad.equals(this.fiscalizaEntidadDTO.getNomEntidad() )){
				registrarFiscalizacionService.registraFiscalizaFormacion(this.fiscalizaEntidadDTO, auditoria);
			}
			if(DocenciaDTO.nomEntidad.equals(this.fiscalizaEntidadDTO.getNomEntidad() )){
				registrarFiscalizacionService.registraFiscalizacionDocencia( this.fiscalizaEntidadDTO, auditoria);
			}
			if(EspecialidadAcademicaDTO.nomEntidad.equals(this.fiscalizaEntidadDTO.getNomEntidad() )){
				registrarFiscalizacionService.registraFiscalizaEspecialidad( this.fiscalizaEntidadDTO, auditoria);
			}
			if(ExperienciaLaboralDTO.nomEntidad.equals(this.fiscalizaEntidadDTO.getNomEntidad() )){
				registrarFiscalizacionService.registraFiscalizaExpLaboral(this.fiscalizaEntidadDTO, auditoria);
			}
			if(TrayectoriaArbitralDTO.entidadTabla.equals(this.fiscalizaEntidadDTO.getNomEntidad() )){
				registrarFiscalizacionService.registraFiscalizaTrayecArbitral(  this.fiscalizaEntidadDTO, auditoria);
			} 
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),"Registrado Correctamente");
			
			cerrarRegistroFiscalizacionPopup();
		} catch (ModeloException e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_MODELO_TITLE),e.getMessage());
		}catch (Exception e) {
			setMensajeroError(propSirenas.getString(ConstanteWeb.EXC_VISTA_TITLE),propSirenas.getString(ConstanteWeb.EXC_VISTA_SOLICITUD));
		}
	}
	
	public void abrirRegistroFiscalizacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogFiscalizacion').show();");
	}
	
	public void cerrarRegistroFiscalizacionPopup(){		
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogFiscalizacion').hide();");
		
		if(this.fiscalizaEntidadDTO.getFormOrigen().equals("formAcademicaArbitro"))
			RequestContext.getCurrentInstance().update("dialogFiscalizaForma");
		if(this.fiscalizaEntidadDTO.getFormOrigen().equals("contratacionesArbitro"))
			RequestContext.getCurrentInstance().update("dialogFiscalizaContratacion");
		if(this.fiscalizaEntidadDTO.getFormOrigen().equals("arbitrajeArbitro"))
			RequestContext.getCurrentInstance().update("dialogFiscalizaArbitraje");
		if(this.fiscalizaEntidadDTO.getFormOrigen().equals("derechoArbitro"))
			RequestContext.getCurrentInstance().update("dialogFiscalizaDerecho");
		if(this.fiscalizaEntidadDTO.getFormOrigen().equals("formAcademicaSecretario"))
			RequestContext.getCurrentInstance().update("dialogFiscalizaFormaSecre");
		if(this.fiscalizaEntidadDTO.getFormOrigen().equals("expLaboralSecretario"))
			RequestContext.getCurrentInstance().update("dialogFiscalizaLaboralSecre");
			
		
		this.fiscalizaEntidadDTO=new FiscalizaEntidadDTO();
		

	}
	
	/**
	 * Metodo que permite obtener busquedaFichaDTO.
	 * @return busquedaFichaDTO , tipo BusquedaFichaDTO.
	 */
	public BusquedaFichaDTO getBusquedaFichaDTO() {
		return busquedaFichaDTO;
	}

	/**
	 * Permite actualizar busquedaFichaDTO.
	 * @param busquedaFichaDTO, tipo BusquedaFichaDTO.
	 */
	public void setBusquedaFichaDTO(BusquedaFichaDTO busquedaFichaDTO) {
		this.busquedaFichaDTO = busquedaFichaDTO;
	}

	/**
	 * Metodo que permite obtener listaFichas.
	 * @return listaFichas , tipo List<BusquedaFichaDTO>.
	 */
	public List<BusquedaFichaDTO> getListaFichas() {
		return listaFichas;
	}

	/**
	 * Permite actualizar listaFichas.
	 * @param listaFichas, tipo List<BusquedaFichaDTO>.
	 */
	public void setListaFichas(List<BusquedaFichaDTO> listaFichas) {
		this.listaFichas = listaFichas;
	}

	/**
	 * Metodo que permite obtener busquedaFiscalizacionDTO.
	 * @return busquedaFiscalizacionDTO , tipo BusquedaFiscalizacionDTO.
	 */
	public BusquedaFiscalizacionDTO getBusquedaFiscalizacionDTO() {
		return busquedaFiscalizacionDTO;
	}

	/**
	 * Permite actualizar busquedaFiscalizacionDTO.
	 * @param busquedaFiscalizacionDTO, tipo BusquedaFiscalizacionDTO.
	 */
	public void setBusquedaFiscalizacionDTO(
			BusquedaFiscalizacionDTO busquedaFiscalizacionDTO) {
		this.busquedaFiscalizacionDTO = busquedaFiscalizacionDTO;
	}

	/**
	 * Metodo que permite obtener listaFiscalizaciones.
	 * @return listaFiscalizaciones , tipo List<BusquedaFiscalizacionDTO>.
	 */
	public List<BusquedaFiscalizacionDTO> getListaFiscalizaciones() {
		return listaFiscalizaciones;
	}

	/**
	 * Permite actualizar listaFiscalizaciones.
	 * @param listaFiscalizaciones, tipo List<BusquedaFiscalizacionDTO>.
	 */
	public void setListaFiscalizaciones(
			List<BusquedaFiscalizacionDTO> listaFiscalizaciones) {
		this.listaFiscalizaciones = listaFiscalizaciones;
	}

	/**
	 * Metodo que permite obtener listaFichasSeleccionadas.
	 * @return listaFichasSeleccionadas , tipo List<BusquedaFichaDTO>.
	 */
	public List<BusquedaFichaDTO> getListaFichasSeleccionadas() {
		return listaFichasSeleccionadas;
	}

	/**
	 * Permite actualizar listaFichasSeleccionadas.
	 * @param listaFichasSeleccionadas, tipo List<BusquedaFichaDTO>.
	 */
	public void setListaFichasSeleccionadas(
			List<BusquedaFichaDTO> listaFichasSeleccionadas) {
		this.listaFichasSeleccionadas = listaFichasSeleccionadas;
	}

	/**
	 * Metodo que permite obtener listaFichasTemporal.
	 * @return listaFichasTemporal , tipo List<BusquedaFichaDTO>.
	 */
	public List<BusquedaFichaDTO> getListaFichasTemporal() {
		return listaFichasTemporal;
	}

	/**
	 * Permite actualizar listaFichasTemporal.
	 * @param listaFichasTemporal, tipo List<BusquedaFichaDTO>.
	 */
	public void setListaFichasTemporal(List<BusquedaFichaDTO> listaFichasTemporal) {
		this.listaFichasTemporal = listaFichasTemporal;
	}

	/**
	 * Metodo que permite obtener fiscalizaEntidadDTO.
	 * @return fiscalizaEntidadDTO , tipo FiscalizaEntidadDTO.
	 */
	public FiscalizaEntidadDTO getFiscalizaEntidadDTO() {
		return this.fiscalizaEntidadDTO;
	}

	/**
	 * Permite actualizar fiscalizaEntidadDTO.
	 * @param fiscalizaEntidadDTO, tipo FiscalizaEntidadDTO.
	 */
	public void setFiscalizaEntidadDTO(FiscalizaEntidadDTO fiscalizaEntidadDTO) {
		this.fiscalizaEntidadDTO = fiscalizaEntidadDTO;
	}

	/**
	 * Metodo que permite obtener fiscalizacionDTO.
	 * @return fiscalizacionDTO , tipo FiscalizacionDTO.
	 */
	public FiscalizacionDTO getFiscalizacionDTO() {
		return fiscalizacionDTO;
	}

	/**
	 * Permite actualizar fiscalizacionDTO.
	 * @param fiscalizacionDTO, tipo FiscalizacionDTO.
	 */
	public void setFiscalizacionDTO(FiscalizacionDTO fiscalizacionDTO) {
		this.fiscalizacionDTO = fiscalizacionDTO;
	}

	/**
	 * Metodo que permite obtener listaInformesFiscalizacion.
	 * @return listaInformesFiscalizacion , tipo List<FiscalizacionDTO>.
	 */
	public List<FiscalizacionDTO> getListaInformesFiscalizacion() {
		return listaInformesFiscalizacion;
	}

	/**
	 * Permite actualizar listaInformesFiscalizacion.
	 * @param listaInformesFiscalizacion, tipo List<FiscalizacionDTO>.
	 */
	public void setListaInformesFiscalizacion(
			List<FiscalizacionDTO> listaInformesFiscalizacion) {
		this.listaInformesFiscalizacion = listaInformesFiscalizacion;
	}

	/**
	 * Metodo que permite obtener listaDocenciaFiscalizada.
	 * @return listaDocenciaFiscalizada , tipo List<DocenciaDTO>.
	 */
	public List<DocenciaDTO> getListaDocenciaFiscalizada() {
		return listaDocenciaFiscalizada;
	}

	/**
	 * Permite actualizar listaDocenciaFiscalizada.
	 * @param listaDocenciaFiscalizada, tipo List<DocenciaDTO>.
	 */
	public void setListaDocenciaFiscalizada(
			List<DocenciaDTO> listaDocenciaFiscalizada) {
		this.listaDocenciaFiscalizada = listaDocenciaFiscalizada;
	}

	/**
	 * Metodo que permite obtener listaEspecialidadFiscalizada.
	 * @return listaEspecialidadFiscalizada , tipo List<EspecialidadAcademicaDTO>.
	 */
	public List<EspecialidadAcademicaDTO> getListaEspecialidadFiscalizada() {
		return listaEspecialidadFiscalizada;
	}

	/**
	 * Permite actualizar listaEspecialidadFiscalizada.
	 * @param listaEspecialidadFiscalizada, tipo List<EspecialidadAcademicaDTO>.
	 */
	public void setListaEspecialidadFiscalizada(
			List<EspecialidadAcademicaDTO> listaEspecialidadFiscalizada) {
		this.listaEspecialidadFiscalizada = listaEspecialidadFiscalizada;
	}

	/**
	 * Metodo que permite obtener listaExpLaboralFiscalizada.
	 * @return listaExpLaboralFiscalizada , tipo List<ExperienciaLaboralDTO>.
	 */
	public List<ExperienciaLaboralDTO> getListaExpLaboralFiscalizada() {
		return listaExpLaboralFiscalizada;
	}

	/**
	 * Permite actualizar listaExpLaboralFiscalizada.
	 * @param listaExpLaboralFiscalizada, tipo List<ExperienciaLaboralDTO>.
	 */
	public void setListaExpLaboralFiscalizada(
			List<ExperienciaLaboralDTO> listaExpLaboralFiscalizada) {
		this.listaExpLaboralFiscalizada = listaExpLaboralFiscalizada;
	}

	/**
	 * Metodo que permite obtener listaFormacionFiscalizada.
	 * @return listaFormacionFiscalizada , tipo List<FormacionAcademicaDTO>.
	 */
	public List<FormacionAcademicaDTO> getListaFormacionFiscalizada() {
		return listaFormacionFiscalizada;
	}

	/**
	 * Permite actualizar listaFormacionFiscalizada.
	 * @param listaFormacionFiscalizada, tipo List<FormacionAcademicaDTO>.
	 */
	public void setListaFormacionFiscalizada(
			List<FormacionAcademicaDTO> listaFormacionFiscalizada) {
		this.listaFormacionFiscalizada = listaFormacionFiscalizada;
	}

	/**
	 * Metodo que permite obtener listaTrayectoriaFiscalizada.
	 * @return listaTrayectoriaFiscalizada , tipo List<TrayectoriaArbitralDTO>.
	 */
	public List<TrayectoriaArbitralDTO> getListaTrayectoriaFiscalizada() {
		return listaTrayectoriaFiscalizada;
	}

	/**
	 * Permite actualizar listaTrayectoriaFiscalizada.
	 * @param listaTrayectoriaFiscalizada, tipo List<TrayectoriaArbitralDTO>.
	 */
	public void setListaTrayectoriaFiscalizada(
			List<TrayectoriaArbitralDTO> listaTrayectoriaFiscalizada) {
		this.listaTrayectoriaFiscalizada = listaTrayectoriaFiscalizada;
	}

	/**
	 * Metodo que permite obtener listaBusquedaFiscalizaciones.
	 * @return listaBusquedaFiscalizaciones , tipo List<BusquedaFiscalizacionDTO>.
	 */
	public List<BusquedaFiscalizacionDTO> getListaBusquedaFiscalizaciones() {
		return listaBusquedaFiscalizaciones;
	}

	/**
	 * Permite actualizar listaBusquedaFiscalizaciones.
	 * @param listaBusquedaFiscalizaciones, tipo List<BusquedaFiscalizacionDTO>.
	 */
	public void setListaBusquedaFiscalizaciones(
			List<BusquedaFiscalizacionDTO> listaBusquedaFiscalizaciones) {
		this.listaBusquedaFiscalizaciones = listaBusquedaFiscalizaciones;
	}	
	
	
}
